package src.unapec.security.models.EntornoJava;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.StringBufferInputStream;
import java.io.UnsupportedEncodingException;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import com.sun.xml.internal.stream.buffer.stax.StreamReaderBufferProcessor;

   public class Encriptacion {

	        Cipher ecipher;
	        Cipher dcipher;
	    
	        Encriptacion(SecretKey key) {
	            try {
	                ecipher = Cipher.getInstance("DES");
	                dcipher = Cipher.getInstance("DES");
	                ecipher.init(Cipher.ENCRYPT_MODE, key);
	                dcipher.init(Cipher.DECRYPT_MODE, key);
	    
	            } catch (javax.crypto.NoSuchPaddingException e) {
	            } catch (java.security.NoSuchAlgorithmException e) {
	            } catch (java.security.InvalidKeyException e) {
	            }
	        }
	    
	        public String encrypt(String str) {
	            try {
	                // Encode the string into bytes using utf-8
	                byte[] utf8 = str.getBytes("UTF8");
	    
	                // Encrypt
	                byte[] enc = ecipher.doFinal(utf8);
	    
	                // Encode bytes to base64 to get a string
	                return new sun.misc.BASE64Encoder().encode(enc);
	            } catch (javax.crypto.BadPaddingException e) {
	            } catch (IllegalBlockSizeException e) {
	            } catch (UnsupportedEncodingException e) {
	            } catch (java.io.IOException e) {
	            }
	            return null;
	        }
	    
	        public String decrypt(String str) {
	            try {
	                // Decode base64 to get bytes
	                byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str);
	    
	                // Decrypt
	                byte[] utf8 = dcipher.doFinal(dec);
	    
	                // Decode using utf-8
	                return new String(utf8, "UTF8");
	            } catch (javax.crypto.BadPaddingException e) {
	            } catch (IllegalBlockSizeException e) {
	            } catch (UnsupportedEncodingException e) {
	            } catch (java.io.IOException e) {
	            }
	            return null;
	        }
	    

	//Here's an example that uses the class:

   public static void main(String[] args) {
   
	    try {
	        // Generate a temporary key. In practice, you would save this key.
	        // See also e464 Encrypting with DES Using a Pass Phrase.
	        SecretKey key = KeyGenerator.getInstance("DES").generateKey();
	    
	        // Create encrypter/decrypter class
	        Encriptacion encrypter = new Encriptacion(key);
	    
	        // Encrypt
//	        String encrypted = encrypter.encrypt("Don't tell anybody!");
//	        
	        File file = new File("/home/rmatos/Desktop/testing.txt");
//	        BufferedWriter bw = new BufferedWriter(new FileWriter(file));
//	        
//	        bw.write(encrypted);
//	        bw.close();
//	        
//	        System.out.println(encrypted);
	        
	        String a;
	        
	        new BufferedInputStream(new InputStreamReader(new StringBufferInputStream()));
	        
	        BufferedReader br = new BufferedReader(new FileReader(file));
	        String line = null;
	        
	        line = br.readLine();
	        
	        // Decrypt
	        String decrypted = encrypter.decrypt(line);
	        
	        System.out.println(decrypted);
	        
	        
	    } catch (Exception e) {
	    }

		 }
   }